@深巷
2年前 提问
1个回答

SQL注入的代码层防御手段有哪些

007bug
2年前

SQL注入的代码层防御手段有以下这些:

  • 白名单验证:白名单验证是在用户进一步处理之前验证输入是否符合所期望的类型、长度、大小、数字范围或其他标准。白名单验证通常利用正则表达式完成,可以从数据类型、数据值、数据范围、数据内容、数据大小等方面考虑。

  • 黑名单验证:黑名单验证是拒绝不良的输入,如果输入中包含了恶意内容,则直接拒绝。黑名单验证要比白名单验证弱些,因为潜在的不良字符很多,这样会导致黑名单列表很大,而且很难及时更新。黑名单验证通常也是利用正则表达式,附加一个禁止使用的字符。

  • 通过代码过滤防御:SQL注入产生的根本原因是用户修改了程序员设计的SQL语句结构而导致的。所以,Web服务器端接收的参数,可以利用过滤空格来实现SQL注入防御。对于纯中文,过滤掉空格就能够解决问题,若输入的是英文字符串,空格本身是用户输入内容的一部分,不能随意删除。这时候,就要分两种情况进行处理。

  • 添加数据记录防御:如果Web应用程序需要从表单中获取相关数据,然后往后台数据库的相关数据表中插入一条新的记录,程序员可以不直接使用INSERT语句,而通过先打开记录集对象,然后往记录集对象中先添加一条空记录,再将具体的数据内容写入到记录字段中,最后直接将记录集更新到数据库中。这样就可以有效避免SQL攻击,达到防御的目的。

  • 删除数据防御:如果Web应用程序需要删除数据记录,程序员也可以不直接使用DELETE语句,而通过先构造一条查询语句,打开记录集对象,然后找到要删除的数据记录,将此记录删除,再将删除记录后的记录集更新到数据库中。删除操作是使用rs.delete语句完成的。这样就可以有效避免SQL攻击,达到防御的目的。